#define _CRT_SECURE_NO_WARNINGS 1
class Solution {
public:
	std::string multiply(std::string num1, std::string num2)
	{
		if (num1.empty() || num2.empty() || num1[0] == '0' || num2[0] == '0')//一方为空字符串 或者 一方的第一个字符是0 则return "0"
		{
			return "0";
		}

		int len1 = num1.size();
		int len2 = num2.size();

		int* arr = new int[len1 + len2]();// 使用 new 分配数组并初始化为 0

		//循环相乘得到结果，并且将其放进数组[i+j+1]的下标位置处
		for (int i = len1 - 1; i >= 0; i--)
		{
			//将其转换为数字
			int x = num1[i] - '0';

			for (int j = len2 - 1; j >= 0; j--)
			{   //将其转换为数字
				int y = num2[j] - '0';

				//将相乘结果放进数组[i+j+1]的下标位置处
				arr[i + j + 1] += x * y;
			}
		}

		//对最后的数组进行进位操作
		for (int m = len1 + len2 - 1; m > 0; m--)
		{
			arr[m - 1] += arr[m] / 10;
			arr[m] %= 10;
		}

		//将数组里面的数字转换成字符且进行追加进一个新的string对象
		string ret;
		//若数组第一个位置没被用（其值为0），即代表第二个位置没有进位，所以从下标为1的位置开始进行追加
		int index = arr[0] == 0 ? 1 : 0;
		while (index < len1 + len2)
		{
			ret.append(1, arr[index] + '0'); // 使用 append(1, char) 来添加单个字符
			index++;
		}

		delete[] arr; // 释放动态分配的数组
		return ret;
	}
};